﻿Imports Capa_de_Acceso_a_Datos
Imports Microsoft.Office.Interop


Public Class frmImportarNotasCredito

    Private Sub Salir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Salir.Click
        Me.Dispose()
        frmNotasCredito.Visible = True
    End Sub


    Private Sub ImportarNotasCredito_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
        Me.Dispose()
        frmNotasCredito.Visible = True
    End Sub

    Private Sub btnImportar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnImportar.Click
        Dim Path As String = DialogoArchivo.FileName
        If DialogoArchivo.CheckFileExists() Then
            ImportarExcel(Path)
        Else
            MsgBox("La ruta especificada no es válida", MsgBoxStyle.Information)
        End If
    End Sub

    Private Sub btnExaminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExaminar.Click
        DialogoArchivo.ShowDialog()
        txtPath.Text = DialogoArchivo.FileName
    End Sub

    Public Sub ImportarExcel(ByVal Path As String)

        Dim ConexionExcel As System.Data.OleDb.OleDbConnection = Nothing
        'Establezco la conexión al Excel
        ConexionExcel = New System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0; data source='" & Path & " '; " & "Extended Properties=Excel 8.0;")

        Try
            ConexionExcel.Open()
            Dim ds As System.Data.DataSet
            Dim cmd As System.Data.OleDb.OleDbDataAdapter
            'Dim NombreHoja As String = ObtenerNombreHoja(Path)

            'cmd = New System.Data.OleDb.OleDbDataAdapter("select * from [ " & NombreHoja & "$]", ConexionExcel)
            cmd = New System.Data.OleDb.OleDbDataAdapter("select * from [Hoja1$]", ConexionExcel)
            cmd.TableMappings.Add("tablaNC", "dsNC")

            ds = New System.Data.DataSet
            cmd.Fill(ds)

            Dim FarmaciaId As Integer
            Dim PresentacionId As Integer
            Dim ObraSocialXPlanId As Integer = cboObraSocialNC.SelectedValue
            Dim Ano As Integer = cboAnoNC.SelectedValue
            Dim Mes As Integer = cboMesNC.SelectedValue
            Dim DrogueriaId As Integer            
            Dim TipoNotaCreditoId As Integer
            Dim NotaCreditoCodigo As Integer
            Dim NotaCreditoImporte As Double
            Dim NotaCreditoFecha As Date
            Dim TipoEnvioNotaCreditoId As Integer
            Dim SeInsertoAlMenosUna As Boolean = False


            Dim TablaNotasNoInsertadas As DataTable = New DataTable()
            TablaNotasNoInsertadas.Columns.Add(New DataColumn("Código"))
            TablaNotasNoInsertadas.Columns.Add(New DataColumn("Importe"))
            TablaNotasNoInsertadas.Columns.Add(New DataColumn("Farmacia"))


            'Por cada fila agrego una NC a la BD
            For Each fila As DataRow In ds.Tables(0).Rows

                'Obtengo el CódigoPAMI para luego obtener el id de la farmacia
                Dim CodigoPAMI As Integer = fila(1)
                FarmaciaId = FarmaciaDAO.obtenerFarmaciaId(CodigoPAMI)

                'Obtengo el id de la presentación
                PresentacionId = PresentacionDAO.obtenerIdPresentacion(FarmaciaId, ObraSocialXPlanId, Ano, Mes)

                'Obtengo el id de la droguería
                Dim DrogueriaCodigo As Integer = fila(4)
                DrogueriaId = DrogueriaDAO.obtenerDrogueriaId(DrogueriaCodigo)

                'Obtengo el id del tipo de nota de crédito
                Dim TipoNotaCreditoNombre As String = fila(3)
                TipoNotaCreditoId = TipoNotaCreditoDAO.obtenerTipoNotaCreditoId(TipoNotaCreditoNombre)

                'Obtengo el id del tipo de envío
                Dim TipoEnvioNotaCreditoNombre As String = fila(9)
                TipoEnvioNotaCreditoId = TipoEnvioNotaCreditoDAO.obtenerTipoEnvioNotaCreditoId(TipoEnvioNotaCreditoNombre)

                NotaCreditoCodigo = fila(6)
                NotaCreditoImporte = fila(7)
                NotaCreditoFecha = fila(8)

                'Si alguno de los id no existe en la base de datos agrego la farmacia a una
                'tabla para luego informar al usuario que no se registró la nota de crédito
                If Not Existen(FarmaciaId, PresentacionId, DrogueriaId, TipoNotaCreditoId) Then
                    TablaNotasNoInsertadas.Rows.Add(fila(6), fila(7), fila(2))
                Else
                    'Registramos la nota de crédito
                    NotaCreditoDAO.insertarNotaCredito(PresentacionId, TipoNotaCreditoId, TipoEnvioNotaCreditoId, NotaCreditoImporte, NotaCreditoCodigo, "", NotaCreditoFecha)
                    'TODO insertar movimiento
                    registrarMovimiento(PresentacionId, NotaCreditoImporte, NotaCreditoCodigo, NotaCreditoFecha)
                    SeInsertoAlMenosUna = True
                End If

            Next

            If TablaNotasNoInsertadas.Rows.Count > 0 Then
                frmNotasCreditoNoInsertadas.Tabla = TablaNotasNoInsertadas
                Me.Dispose()
                frmNotasCreditoNoInsertadas.ShowDialog()
            Else
                MsgBox("El archivo ha sido importado con éxito", MsgBoxStyle.Information)
                Me.Dispose()
                frmNotasCredito.Visible = True
            End If

        Catch e As Exception
            MsgBox("El archivo seleccionado no cumple con los requisitos de importación del sistema", MsgBoxStyle.Critical)
            MsgBox(e.Message, MsgBoxStyle.Information)
        Finally
            ConexionExcel.Close()
        End Try

    End Sub

    Private Sub registrarMovimiento(ByVal PresentacionId As Integer, ByVal importeCredito As Double, ByVal notaCreditoCodigo As Integer, ByVal notaCreditoFecha As Date)
        Dim dt As DataTable = PresentacionDAO.obtenerPresentaciones(PresentacionId)
        Dim farmaciaId As Integer = dt.Rows(0)("FarmaciaId")
        Dim tipoNotaCredito As Integer = 6
        CuentaCorrienteDAO.CuentaCorrienteInsertarMovimiento(farmaciaId, tipoNotaCredito, 0, importeCredito, notaCreditoFecha, "Nota de Crédito Nº " + CStr(notaCreditoCodigo))
    End Sub

    Private Function ObtenerNombreHoja(ByVal Path As String) As String

        Dim AplicacionExcel As New Excel.Application ' Aplicación Excel
        Dim LibroExcel As Excel.Workbook             ' Libro de trabajo

        ' Abrimos el libro de trabajo.

        LibroExcel = AplicacionExcel.Workbooks.Open(Filename:=Path)

        ' Recorrermos la colección de hojas de cálculo

        Dim HojaExcel As Excel.Worksheet = LibroExcel.Worksheets(0)

        ' Cerramos el libro de trabajo.

        LibroExcel.Close()
        LibroExcel = Nothing

        ' Cerramos Excel.

        AplicacionExcel.Quit()
        AplicacionExcel = Nothing

        Return HojaExcel.Name
    End Function

    Private Function Existen(ByVal FarmaciaId As Integer, ByVal PresentacionId As Integer, ByVal DrogueriaId As Integer, ByVal TipoNotaCreditoId As Integer) As Integer

        Dim existe As Boolean = True

        If FarmaciaId = 0 Or PresentacionId = 0 Or DrogueriaId = 0 Or TipoNotaCreditoId = 0 Then
            existe = False
        End If

        Return existe

    End Function

    Private Sub frmImportarNotasCredito_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        CargarCombos()
    End Sub

    Private Sub CargarCombos()
        'Combo Año
        cboAnoNC.ValueMember = "AnoId"
        cboAnoNC.DisplayMember = "Ano"
        cboAnoNC.DataSource = Constante.obtenerAnos

        'Combo Mes 
        cboMesNC.ValueMember = "MesId"
        cboMesNC.DisplayMember = "MesNombre"
        cboMesNC.DataSource = MesDAO.obtenerMeses(0)
        cboMesNC.SelectedValue = Date.Now.Month

        'Combo ObraSocialXPlan
        cboObraSocialNC.ValueMember = "ObraSocialXPlanId"
        cboObraSocialNC.DisplayMember = "Descripcion"
        cboObraSocialNC.DataSource = ObraSocialXPlanDAO.comboObraSocialXPlan()

    End Sub
End Class